/** SDK日志等级 */
export enum NERTCLogLevel {
  /** Error 级别日志信息。 */
  "FATAL" = 0,
  /** Error 级别日志信息。 */
  "ERROR" = 1,
  /** Warning 级别日志信息。 */
  "WARNING" = 2,
  /** Info 级别日志信息。默认级别。 */
  "INFO" = 3,
  /** Detail Info 级别日志信息。 */
  "DETAIL_INFO" = 4,
  /** Verbos 级别日志信息。 */
  "VERBOS" = 5,
  /** Debug 级别日志信息。如果你想获取最完整的日志，可以将日志级别设为该等级。 */
  "DEBUG" = 6,
}

/** SDK错误码定义(https://doc.yunxin.163.com/nertc/docs/jUxMjc0OTY?platform=android) */
export enum NERTCErrorCode {
  /** 级别日志信息。 */
  "OK" = 0,
  /** 权限不足。 */
  "ENGINE_ERROR_ROOM_SERVER_PERMISSION_DENIED" = 403,
  /** 请求超时。 */
  "ENGINE_ERROR_ROOM_SERVER_REQUEST_TIMEOUT" = 408,
  /**服务器请求参数错误。 */
  "ENGINE_ERROR_ROOM_SERVER_INVALID_PARAMETERS" = 414,
  /** 非法的AppKey。 */
  "ENGINE_ERROR_ROOM_SERVER_INVALID_APPKEY" = 417,
  /** 分配房间时出现服务器未知错误。 */
  "ENGINE_ERROR_ROOM_SERVER_UNKNOWN_ERROR" = 500,
  /** 登录房间的用户数超过限制的两人。 */
  "ENGINE_ERROR_ROOM_SERVER_ONLY_SUPPORT_TWO_USERS" = 600,
  /** 登录房间时权限密钥错误。 */
  "ENGINE_ERROR_ROOM_SERVER_PERMISSION_KEY_ERROR" = 901,
  /** 登录房间时权限密钥过期。 */
  "ENGINE_ERROR_ROOM_SERVER_PERMISSION_KEY_TIMEOU" = 902,
  /** ask请求无效，因为该请求被后续操作覆盖了。 */
  "ENGINE_ERROR_LIVESTREAM_INVAILD_REQUEST" = 1301,
  /** 推流的参数格式错误。 */
  "ENGINE_ERROR_LIVESTREAM_INVAILD_PARAMETERS" = 1400,
  /** 房间已经退出。 */
  "ENGINE_ERROR_LIVESTREAM_ROOM_HAS_EXITED" = 1401,
  /** 推流任务超出上限。 */
  "ENGINE_ERROR_LIVESTREAM_EXCEED_LIMIT" = 1402,
  /** 推流 ID 重复。 */
  "ENGINE_ERROR_LIVESTREAM_DUPLICATE_ID" = 1403,
  /** taskId任务不存在，或房间不存在。。 */
  "ENGINE_ERROR_LIVESTREAM_NOT_FOUND" = 1404,
  /** 请求失败。 */
  "ENGINE_ERROR_LIVESTREAM_REQUEST_FAILED" = 1417,
  /** 服务器内部错误。 */
  "ENGINE_ERROR_LIVESTREAM_INTERNAL_SERVER_ERROR" = 1500,
  /** 布局参数错误。 */
  "ENGINE_ERROR_LIVESTREAM_INVALID_LAYOUT" = 1501,
  /**布局的图片错误。 */
  "ENGINE_ERROR_LIVESTREAM_USER_PICTURE_ERROR" = 1512,
  /** 用户无发流权限。 */
  "ENGINE_ERROR_PERMISSION_KEY_NO_PUBLISH_PERMISSION" = 1620,
  /** 用户无订阅权限。 */
  "ENGINE_ERROR_PERMISSION_KEY_ENGINE_ERROR_PERMISSION_KEY_NO_SUBSCRIBE_PERMISSION" = 2803,
  /** 加入房间的人数达到限制。 */
  "kLiteSDKServerPersonsInRoomReachedTheLimit" = 4003,
  /** 内部错误。 */
  "ENGINE_ERROR_FATAL" = 30001,
  /** 内存溢出。 */
  "ENGINE_ERROR_OUT_OF_MEMORY" = 30002,
  /** 参数错误。 */
  "ENGINE_ERROR_INVALID_PARAM" = 30003,
  /** 不支持的操作。 */
  "ENGINE_ERROR_NOT_SUPPORTED" = 30004,
  /** 状态错误。 */
  "ENGINE_ERROR_INVALID_STATE" = 30005,
  /** 缺乏资源。 */
  "ENGINE_ERROR_LACK_OF_RESOURCE" = 30006,
  /** index序号非法。 */
  "ENGINE_ERROR_INVALID_INDEX" = 30007,
  /**设备未找到。 */
  "ENGINE_ERROR_DEVICE_NOT_FOUND" = 30008,
  /** 设备 ID 不存在。 */
  "ENGINE_ERROR_INVALID_DEVICE_SOURCEID" = 30009,
  /** 视频能力profile type不符合要求。 */
  "ENGINE_ERROR_INVALID_VIDEO_PROFILE" = 30010,
  /** 创建设备失败。 */
  "ENGINE_ERROR_CREATE_DEVICE_SOURCE_FAIL" = 30011,
  /** 画布非法。 */
  "ENGINE_ERROR_INVALID_RENDER" = 30012,
  /** 本地视频预览已打开。 */
  "ENGINE_ERROR_DEVICE_PREVIEW_ALREADY_STARTED" = 30013,
  /** 高级 Token 鉴权失败，用户权限验证错误。 */
  "ENGINE_ERROR_USER_PERMISSION_KEY_AUTH_FAILED" = 30121,
  /** SEI 超过最大数据限制。 */
  "ENGINE_ERROR_SEI_EXCEED_MAX_DATA_LIMIT" = 30122,
  /** 数据通道发送大小超过限制。 */
  "ENGINE_ERROR_DATA_CHANNEL_EXCEED_MAX_DATA_LIMIT" = 30123,
  /** 连接未找到。 */
  "ENGINE_ERROR_CONNECTION_NOT_FOUND" = 30200,
  /** 媒体流不存在。 */
  "ENGINE_ERROR_STREAM_NOT_FOUND" = 30201,
  /** 添加媒体播放器音轨失败。 */
  "ENGINE_ERROR_ADD_TRACK_FAIL" = 30202,
  /** 媒体播放器音轨未找到。 */
  "ENGINE_ERROR_TRACK_NOT_FOUND" = 30203,
  /** 媒体连接已断开。 */
  "ENGINE_ERROR_MEDIA_CONNECTION_DISCONNECTED" = 30204,
  /** 信令断开。 */
  "ENGINE_ERROR_SIGNAL_DISCONNECTED" = 30205,
  /** 用户被管理员移出房间。 */
  "ENGINE_ERROR_SERVER_KICKED" = 30206,
  /** 房间已关闭。 */
  "ENGINE_ERROR_ROOM_CLOSED" = 30207,
  /** 因为切换房间而离开房间。 */
  "LEAVE_CHANNEL_FOR_SWITCH" = 30208,
  /** 因为重复 UID 登录而离开房间。 */
  "LEAVE_CHANNEL_FOR_DUPLICATE_UID" = 30209,
  /** 没有音频设备的权限。 */
  "ENGINE_ERROR_ADM_No_Authorize" = 40000,
  /** 初始化音频采集设备（麦克风）失败。 */
  "ENGINE_ERROR_ADM_INIT_RECORDING_FAILED" = 40001,
  /** 启动音频采集设备（麦克风）失败。 */
  "ENGINE_ERROR_ADM_START_RECORDING_FAILED" = 40002,
  /** 停止音频采集设备（麦克风）失败。 */
  "ENGINE_ERROR_ADM_STOP_RECORDING_FAILED" = 40003,
  /** 初始化音频播放设备失败。。 */
  "ENGINE_ERROR_ADM_INIT_PLAYOUT_FAILED" = 40004,
  /** 音频播放设备启动失败。 */
  "ENGINE_ERROR_ADM_START_PLAYOUT_FAILED" = 40005,
  /** 音频播放设备停止失败。 */
  "ENGINE_ERROR_ADM_STOP_PLAYOUT_FAILED" = 40006,
  /** 音频采集设备运行异常。 */
  "ENGINE_ERROR_ADM_RECORDING_FAILED" = 40007,
  /** 音频播放设备运行异常。 */
  "ENGINE_ERROR_ADM_PLAYOUT_FAILED" = 40008,
  /** 没有视频设备权限。 */
  "ENGINE_ERROR_VDM_NO_AUTHORIZE" = 50000,
  /** 非屏幕共享使用辅流。 */
  "ENGINE_ERROR_VDM_NOT_SCREEN_USE_SUB_STREAM" = 50001,
  /** 摄像头断开。 */
  "ENGINE_ERROR_VDM_CAMERA_DISCONNECT" = 50303,
  /** 摄像头死机。 */
  "ENGINE_ERROR_VDM_CAMERA_FREEZED" = 50304,
  /** 未知摄像头错误。 */
  "ENGINE_ERROR_VDM_CAMERA_UNKNOWN_ERROR" = 50305,
  /** 摄像头无数据帧。 */
  "ENGINE_ERROR_VDM_CAMERA_NO_FRAME" = 50306,
  /** 摄像头启动失败。 */
  "ENGINE_ERROR_VDM_CAMERA_CREATE_FAIL" = 50307,
  /** 没有录制视频权限。 */
  "ENGINE_ERROR_VDM_SCREEN_CAPTURE_NO_AUTHORIZE" = 50400,
}

/** RTC房间场景 */
export enum NERTCChannelProfile {
  /** 通话场景。 */
  "COMMUNICATION" = 0,
  /** 直播场景。 */
  "LIVE_BROADCASTING" = 1,
}
/** RTC用户角色 */
export enum NERTCUserRole {
  /** 主播。 */
  "CLIENT_ROLE_BROADCASTER" = 0,
  /** 观众。 */
  "CLIENT_ROLE_AUDIENCE" = 1,
}

/** 当前房间的连接状态 */
export enum NERTCChannelConnectionState {
  /** 尚未加入房间。 */
  "CONNECTION_STATE_DISCONNECTED" = 1,
  /** 正在加入房间。 */
  "CONNECTION_STATE_CONNECTING" = 2,
  /** 加入房间成功。 */
  "CONNECTION_STATE_CONNECTED" = 3,
  /** 正在尝试重新加入房间。 */
  "CONNECTION_STATE_RECONNECTING" = 4,
  /** 加入房间失败。 */
  "CONNECTION_STATE_FAILED" = 5,
}

/** SDK网络类型定义 */
export enum NERTCConnectionType {
  /** 未知类型。 */
  "CONNECTION_UNKNOWN" = 0,
  /** 以太网数据连接。 */
  "CONNECTION_ETHERNET" = 1,
  /** WIFI。 */
  "CONNECTION_WIFI" = 2,
  /** 2G 移动网络。 */
  "CONNECTION_2G" = 3,
  /** 3G 移动网络。 */
  "CONNECTION_3G" = 4,
  /** 4G 移动网络。 */
  "CONNECTION_4G" = 5,
  /** 蓝牙连接。 */
  "CONNECTION_BLUETOOTH" = 6,
  /** 5G 移动网络。 */
  "CONNECTION_5G" = 7,
  /** 网络连接类型缺失。 */
  "CONNECTION_NONE" = 8,
}

/** 屏幕共享功能的编码策略倾向。*/
export enum NERtcSubStreamContentPrefer {
  /** （默认）内容类型为动画。当共享的内容是视频、电影或游戏时，推荐选择该内容类型。当用户设置内容类型为动画时，按用户设置的帧率处理。 */
  "CONTENT_PREFER_MOTION" = 0,
  /** 内容类型为细节。当共享的内容是图片或文字时，推荐选择该内容类型。当用户设置内容类型为细节时，最高允许用户设置到 10 帧，设置超过 10 帧时，按 10 帧处理。 */
  "CONTENT_PREFER_DETAILS" = 1,
}

/** 远端视频流类型 */
export enum NERtcRemoteVideoStreamType {
  /** 视频主流，默认是摄像头camera */
  "HIGH" = 0,
  /** 视频辅流，默认是屏幕共享screen */
  "LOW" = 1,
}

/** 视频流类型 */
export enum NERtcVideoStreamType {
  /** 视频主流，默认是摄像头camera */
  "MAIN" = 0,
  /** 视频辅流，默认是屏幕共享screen */
  "SUB" = 1,
}

/** 视频渲染缩放模式 */
export enum NERTCRenderMode {
  /** 适应区域。视频尺寸等比缩放。保证所有区域被填满，视频超出部分会被裁剪 */
  "Fit" = 0,
  /** 填满视窗模式。视频尺寸非等比缩放。保证视频内容全部显示，且填满视窗 */
  "FullFill" = 1,
  /** 适配视窗模式。视频尺寸等比缩放。优先保证视频内容全部显示。若视频尺寸与显示视窗尺寸不一致，视窗未被填满的区域填充背景色。 */
  "CropFill" = 2,
}

/** 视频镜像模式 */
export enum NERTCMirrorMode {
  /** 默认（由 SDK 决定模式）[如果使用前置摄像头，SDK 默认启用镜像模式；如果使用后置摄像头，SDK 默认关闭镜像模式]。 */
  "AUTO" = 0,
  /** 启用镜像模式。 */
  "ENABLE" = 1,
  /** 关闭镜像模式。 */
  "DISABLE" = 2,
}

/** 视频编码帧率 */
export enum NERtcVideoFrameRate {
  /** 默认设置。SDK默认帧率。 */
  "FRAME_RATE_FPS_DEFAULT" = 0,
  /** 帧率为7。 */
  "FRAME_RATE_FPS_7" = 7,
  /** 帧率为10。 */
  "FRAME_RATE_FPS_10" = 10,
  /** 帧率为15。 */
  "FRAME_RATE_FPS_15" = 15,
  /** 帧率为24。 */
  "FRAME_RATE_FPS_24" = 24,
  /** 帧率为30。 */
  "FRAME_RATE_FPS_30" = 30,
}

/** 视频裁剪模式 */
export enum NERtcVideoCropMode {
  /** 相机原始比例。 */
  "DEFAULT" = 0,
  /** 16:9 裁剪。 */
  "CROP_16x9" = 1,
  /** 4:3 裁剪。 */
  "CROP_4x3" = 2,
  /** 1:1 裁剪。 */
  "CROP_1x1" = 3,
}

/** 带宽受限时的视频编码降级偏好。 */
export enum NERtcDegradationPreference {
  /** （默认）根据场景模式调整适应性偏好。【通信场景中，选择DEGRADATION_BALANCED模式，在编码帧率和视频质量之间保持平衡。直播场景中，选择DEGRADATION_MAINTAIN_QUALITY模式，降低编码帧率以保证视频质量。】 */
  "DEGRADATION_DEFAULT" = 0,
  /** 流畅优先，降低视频质量以保证编码帧率。在弱网环境下，降低视频清晰度以保证视频流畅，此时画质降低，画面会变得模糊，但可以保持视频流畅。 */
  "DEGRADATION_MAINTAIN_FRAMERATE" = 1,
  /** 清晰优先，降低编码帧率以保证视频质量。在弱网环境下，降低视频帧率以保证视频清晰，此时可能会出现一定卡顿。 */
  "DEGRADATION_MAINTAIN_QUALITY" = 2,
  /** 该模式下 SDK 固定输出竖屏模式的视频，如果采集到的视频是横屏模式，则视频编码器会对其进行裁剪。 该模式适用于当接收端无法调整视频方向时，例如旁路推流场景。 */
  "DEGRADATION_BALANCED" = 3,
}

/** 设置本地视频编码的方向模式，即本地发送视频的方向模式，同时影响本端用户的预览画面和远端用户看到的视频画面。 */
export enum NERtcVideoOutputOrientationMode {
  /** （默认）该模式下 SDK 输出的视频方向与采集到的视频方向一致。接收端会根据收到的视频旋转信息对视频进行旋转。 该模式适用于接收端可以调整视频方向的场景。如果采集的视频是横屏模式，则输出的视频也是横屏模式。如果采集的视频是竖屏模式，则输出的视频也是竖屏模式。 */
  "VIDEO_OUTPUT_ORIENTATION_MODE_ADAPTATIVE" = 0,
  /** 该模式下 SDK 固定输出横屏模式的视频。如果采集到的视频是竖屏模式，则视频编码器会对其进行裁剪。 该模式适用于当接收端无法调整视频方向时，例如旁路推流场景。 */
  "VIDEO_OUTPUT_ORIENTATION_MODE_FIXED_LANDSCAPE" = 1,
  /** 清晰优先，降低编码帧率以保证视频质量。在弱网环境下，降低视频帧率以保证视频清晰，此时可能会出现一定卡顿。 */
  "VIDEO_OUTPUT_ORIENTATION_MODE_FIXED_PORTRAIT" = 2,
}

/** 视频清晰度Profile（已经废弃） */
export enum NERtcVideoProfileType {
  /** 普清，（160×120/90 @15fps） */
  "Lowest" = 0,
  /** 标清,（320x180/240 @15fps） */
  "Low" = 1,
  /** 高清, (640x360/480 @30fps) */
  "Standard" = 2,
  /** 超清, (1280x720 @30fps) */
  "HD720P" = 3,
  /** 1080P, (1920x1080 @30fps) */
  "HD1080P" = 4,
}

/** 视频设备状态 */
export enum NERTCVideoDeviceState {
  /** 打开成功。 */
  "OPENED" = 1,
  /** 已关闭。 */
  "CLOSED" = 2,
  /** 相机断开，可能被其他应用抢占。*/
  "DISCONNECTED" = 3,
  /** 相机冻结。 */
  "FREEZED" = 4,
  /** 未知错误。 */
  "UNKNOWN_ERROR" = 5,
}

/** 音频模式 */
export enum NERTCAudioProfile {
  /** 默认设置。语音场景下为 STANDARD，音乐场景下为 HIGH_QUALITY。 */
  "DEFAULT" = 0,
  /** 标准音质模式。采样率为 16 kHz、语音编码、单声道、编码码率最大值为 20 Kbps。 */
  "STANDARD" = 1,
  /** 标准扩展模式。采样率为 16 kHz、语音编码、单声道、编码码率最大值为 32 Kbps。 */
  "STANDARD_EXTEND" = 2,
  /** 中等音质模式。采样率为 48 kHz、音乐编码、单声道、编码码率最大值为 64 Kbps。 */
  "MIDDLE_QUALITY" = 3,
  /** 中等音质模式（立体音）。采样率为 48 kHz、音乐编码、双声道、编码码率最大值为 80 Kbps。 */
  "MIDDLE_QUALITY_STEREO" = 4,
  /** 高音质模式。采样率为 48 kHz、音乐编码、单声道、编码码率最大值为 96 Kbps。 */
  "HIGH_QUALITY" = 5,
  /** 高音质模式（立体音）。采样率为 48 kHz、音乐编码、双声道、编码码率最大值为 128 Kbps。 */
  "HIGH_QUALITY_STEREO" = 6,
}

/** 音频场景 */
export enum NERTCAudioScenario {
  /** 默认的音频应用场景（语音）。 */
  "DEFAULT" = 0,
  /** 语音场景。推荐用于普通的音视频通话场景。对回声、噪声等环境音过滤效果较好，可以提供更为清晰的人声语音效果。 */
  "SPEECH" = 1,
  /** 音乐场景。音乐级别音质设置，高保真、超流畅，推荐用于在线 KTV、在线演唱会、音乐直播、乐器教学等高音质要求的场景。 */
  "MUSIC" = 2,
  /** 语音聊天室场景。优先保障音频连续性与稳定性，适用于用户需要频繁上下麦的场景。仅移动端支持。*/
  "CHATROOM" = 3,
}

/** 语音设备类型 */
export enum NERTCAudioDevice {
  /** 扬声器。 */
  "SPEAKER_PHONE" = 0,
  /** 有线耳机。 */
  "WIRED_HEADSET" = 1,
  /** 听筒。 */
  "EARPIECE" = 2,
  /** 蓝牙耳机。*/
  "BLUETOOTH_HEADSET" = 3,
}

/** 音频设备类型 */
export enum NERTCAudioDeviceType {
  /** 音频采集设备。 */
  "RECORD" = 1,
  /** 音频播放设备。 */
  "PLAYOUT" = 2,
}

/** 音频设备状态 */
export enum NERTCAudioDeviceState {
  /** 打开成功。 */
  "OPENED" = 1,
  /** 已关闭。 */
  "CLOSED" = 2,
  /** 初始化失败。*/
  "INIT_ERROR" = 3,
  /** 开启失败。 */
  "START_ERROR" = 4,
  /** 未知错误。 */
  "UNKNOWN_ERROR" = 5,
}

/**
 * 初始化NERTC引擎的参数
 * @enum {Number}
 */
export class engineParam {
  constructor(
    public appKey: string,
    public logDir: string,
    public logLevel: number
  ) {
    this.appKey = appKey;
    this.logDir = logDir;
    this.logLevel = logLevel;
  }
}

/**
 * 初始化NERTC引擎的参数
 * @enum {Number}
 */
export class NERtcAudioVolumeInfo {
  constructor(
    public uerID: string,
    public subStreamVolume: any,
    public volume: any
  ) {
    this.uerID = uerID;
    this.subStreamVolume = subStreamVolume;
    this.volume = volume;
  }
}
